const Promise = require('./es6-promise.js');

function wxPromisify(fn) {
    return function (obj = {}) {
        return new Promise((resolve, reject) => {
            obj.success = function (res) {
                //成功
                resolve(res)
            };
            obj.fail = function (res) {
                //失败
                reject(res)
            };
            fn(obj)
        })
    }
}

//无论promise对象最后状态如何都会执行
Promise.prototype.finally = function (callback) {
    let P = this.constructor;
    return this.then(
        value => P.resolve(callback()).then(() => value),
        reason => P.resolve(callback()).then(() => {
            throw reason
        })
    );
};

/**
 * 微信请求get方法
 * url
 * data 以对象的格式传入
 */
function getRequest(url, data) {
    var getRequest = wxPromisify(wx.request);
    return getRequest({
        url: url,
        method: 'GET',
        data: data,
        header: {
            'Content-Type': 'application/json'
        }
    })
}

/**
 * 微信请求post方法封装
 * url
 * data 以对象的格式传入
 */
function postRequest(url, data) {
    var postRequest = wxPromisify(wx.request);
    return postRequest({
        url: url,
        method: 'POST',
        data: data,
        header: {
            "content-type": "application/x-www-form-urlencoded"
        },
    })
}

/**
 * 带参文件上传
 * @param url
 * @param data
 * @param filename
 * @param filePath
 * @returns {*}
 */
function uploadFile(url, img = [], filename,data) {
    return Promise.all(img.map((tempFilePath) => {
        return new Promise(function (resolve, reject) {
            wx.uploadFile({
                url: url,
                filePath: tempFilePath,
                name: filename,
                formData:data,
                success: function (res) {
                    resolve(res);
                },
                fail: function (err) {
                    reject(err);
                }
            });
        });
    }))
}

function showToast(title) {
    wx.showToast({
        title: title,
        icon:'none',
        duration:2000
    })
}

    module.exports = {
        postRequest: postRequest,
        getRequest: getRequest,
        uploadFile: uploadFile,
        showToast:showToast
    };